﻿using System;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using MIAP.Entidades;
using MIAP.Negocio;

namespace MIAPWEB.Forms
{
    /// <summary>
    /// Clase de la vista Consulta Ejecución Proyectos.
    /// </summary>
    public partial class ConsultaEjecucionProyecto : PageBase
    {
        #region Campos

        /// <summary>
        /// Clase de negocio de las operaciones de Comunes.
        /// </summary>
        private ComunesNegocio comunesNegocio;

        #endregion

        #region Propiedades

        /// <summary>
        ///  Obtiene o establece el archivo versionado.
        /// </summary>
        public ConsultaEjecucionProyectoInfo EjecucionProyecto
        {
            get
            {
                return (ConsultaEjecucionProyectoInfo)this.ViewState["EjecucionProyecto"];
            }

            set
            {
                this.ViewState["EjecucionProyecto"] = value;
            }
        }

        /// <summary>
        /// Obtiene o establece los registros de búsqueda.
        /// </summary>
        private List<ConsultaEjecucionProyectoInfo> DataSourceEjecucion
        {
            get
            {
                if (this.ViewState["DataSourceEjecucion"] == null)
                {
                    this.ViewState["DataSourceEjecucion"] = new List<ConsultaEjecucionProyectoInfo>();
                }

                return this.ViewState["DataSourceEjecucion"] as List<ConsultaEjecucionProyectoInfo>;
            }

            set
            {
                this.ViewState["DataSourceEjecucion"] = value;
            }
        }
        #endregion

        #region Constructor

        /// <summary>
        /// Inicializa una instancia de <see cref="ConsultaEjecucionProyecto"/>
        /// </summary>
        public ConsultaEjecucionProyecto()
        {
            this.comunesNegocio = new ComunesNegocio();
        }
        #endregion

        #region Eventos

        /// <summary>
        /// Evento que se ejecuta al cargar la página.
        /// </summary>
        /// <param name="sender">Objeto que invoca el evento.</param>
        /// <param name="e">Argumentos del evento.</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            this.grdEjecuciones.PageSize= Convert.ToInt32(new ConfiguracionNegocio().GetNumeroPaginasGrid().Descripcion);

            if (!this.Page.IsPostBack)
            {
                this.EjecucionProyecto = new ConsultaEjecucionProyectoInfo();

                this.InitForm();
            }
        }

        /// <summary>
        /// Método ejecutado al dar click al botón Buscar. Realiza una búsqueda de los proyectos ejecutados.
        /// </summary>
        /// <param name="sender">Objeto que invoca el evento.</param>
        /// <param name="e">Argumentos del evento.</param>
        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            this.Search();
        }

        /// <summary>
        /// Método ejecutado al dar click al botón salir. Redirecciona a la página principal.
        /// </summary>
        /// <param name="sender">Objeto qe invoca al evento.</param>
        /// <param name="e">Argumentos del evento.</param>
        protected void btnSalir_Click(object sender, EventArgs e)
        {
            this.Response.Redirect(Common.AppUrls.Default);
        }
        #endregion

        #region Métodos

        /// <summary>
        /// Obtiene la información para los filtros año y mes.
        /// </summary>
        protected void InitForm()
        {
            ComunesNegocio comunesNegocio = new ComunesNegocio();

            this.ddlAño.DataSource = comunesNegocio.GetAños();
            this.ddlAño.DataBind();
            //this.comunesNegocio.SetTodos(this.GetGlobalResourceObject("strings", "Todos").ToString(), this.ddlAño);
            this.ddlAño.SelectedValue = DateTime.Now.Year.ToString();


            this.ddlMes.DataSource = comunesNegocio.GetMeses();
            this.ddlMes.DataBind();
            //this.comunesNegocio.SetTodos(this.GetGlobalResourceObject("strings", "Todos").ToString(), this.ddlMes);
            this.ddlMes.SelectedValue = DateTime.Now.Month.ToString();

            this.Search();
        }

        /// <summary>
        /// Obtiene la información de los filtros y realiza la búsqueda.
        /// </summary>
        protected void Search()
        {
            this.GetFilters();

            var consultaEjecucionNegocio = new ConsultaEjecucionProyectoNegocio();
            this.DataSourceEjecucion = consultaEjecucionNegocio.GetEjecucionProyectosByPeriodo(this.EjecucionProyecto);
            this.grdEjecuciones.DataSource = this.DataSourceEjecucion;
            this.grdEjecuciones.DataBind();
        }

        private void GetFilters()
        {
            this.EjecucionProyecto.Año = ddlAño.SelectedValue == this.comunesNegocio.ValorTodos ? this.EjecucionProyecto.Año = null : int.Parse(ddlAño.SelectedValue);
            this.EjecucionProyecto.Mes = ddlMes.SelectedValue == this.comunesNegocio.ValorTodos ? this.EjecucionProyecto.Mes = null : int.Parse(ddlMes.SelectedValue);
        }

        #endregion

        /// <summary>
        /// Evento que se ejecuta cuando se cambia de página en el grid.
        /// </summary>
        /// <param name="sender">Objeto que invoca el evento.</param>
        /// <param name="e">Argumentos del evento.</param>
        protected void grdEjecuciones_OnPageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.grdEjecuciones.PageIndex = e.NewPageIndex;
            this.grdEjecuciones.DataSource = this.DataSourceEjecucion;
            this.grdEjecuciones.DataBind();
        }
    }
}